<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
          /* 声明的变量将具有以下三大特性：

            - 不能重复声明： 以let声明的变量不能被再次声明，且被其它方式声明的变量也不能被let再次申明
            - 无变量提升：以let声明的变量不能在变量声明前进行使用
            - 暂时性死区：ES6为通过let声明的变量提供了块作用域的特性，被定义在块中的let变量只能在块中使用 */

            // 1.基本声明方式
            let username="alice";
            console.log(username);

            // let username="tom";//报错，以let声明的变量不能被再次声明
            // console.log(username);

            var age=30;
            // let age=50;//被其他方式声明的变量也不能被let再次声明

            let height=175;
            height=180;
            console.log(height);
            window.onload=function(){
                var lis=document.getElementsByTagName("li");
                // for(var i=0;i<lis.length;i++){
                //     lis[i].onclick=function(){
                //         console.log(i);
                //     };
                // }
                //使用let声明，暂时性死区，变量预获取
                for(let i=0;i<lis.length;i++){
                    lis[i].onclick=function(){
                        console.log(i);
                    };
                }
            };

            for(var i=1;i<=10;i++){
                let b=i;//使用let声明的变量支持块级作用域
            }
            // console.log(b);

            //使用let声明的变量支持块级作用域
            {
                var a="aaa";
                let c="ccc";
                console.log(c);
            }
            console.log(a);
            // console.log(c);//报错


            // 以let声明的变量不能在变量声明前进行使用,使用let声明的变量不存在变量提升
            // console.log(xixi);
            // let xixi="哈哈";

          /*   const 
            声明的是一个只读的常量，一旦声明，常量的值就不能改变。

                - 不能重复声明： const声明的变量不能被再次声明，且被其它方式声明的变量也不能被const再次申明
                - 无变量提升：以const声明的变量不能在变量声明前进行使用
                - 暂时性死区：ES6为通过const声明的变量提供了块作用域的特性，被定义在块中的const变量只能在块中使用
                - 不能重复赋值：被const声明的变量不能再次赋值 */


            //使用const来声明常量，不能被再次赋值
            const num=100;
            // num=200;//报错，常量的值不能被再次赋值
            console.log(num);

    </script>
</head>
<body>
    <ul>
        <li>li</li>
        <li>li</li>
        <li>li</li>
    </ul>
</body>
</html>